import { ItemTypeEnum, TankPartTypeEnum, TankWeaponTypeEnum, WeaponAttributeTypeEnum, EngineTypeEnum, ChassisTypeEnum, ConsumableTypeEnum } from "../../enum/goodsEnum";


// 物品接口
export interface BagItem {
    id: number; // 物品id
    name: string; // 物品名称
    tip: string; // 物品描述
    itemType: ItemTypeEnum; // 物品类型
    price?: number;        // 价格
    sellPrice?: number;    // 出售价格
    rarity?: string;       // 稀有度
}

// 战车部件基础接口
export interface TankPart extends BagItem {
    itemType: ItemTypeEnum.TankPart; // 物品类型
    tankPartType: TankPartTypeEnum; // 战车部件类型
    weight: number;        // 重量
    durability: number;    // 耐久度
    maxDurability: number; // 最大耐久度
    defense: number;       // 防御值
}

// 战车武器接口
export interface TankWeapon extends TankPart {
    tankPartType: TankPartTypeEnum.Weapon; // 战车部件类型
    weaponType: TankWeaponTypeEnum; // 战车武器类型
    attackPower: number;   // 攻击力
    attackRange: number;   // 攻击范围
    attackSpeed: number;   // 攻击速度
    ammoType: string;      // 弹药类型
    ammoCapacity: number;  // 弹药容量
    maxAmmoCapacity: number; // 最大弹药容量
    attributeType?: WeaponAttributeTypeEnum; // 属性类型
    specialEffect?: string; // 特殊效果
}

// 引擎接口
export interface Engine extends TankPart {
    tankPartType: TankPartTypeEnum.Engine;
    engineType: EngineTypeEnum;
    weightLimit: number;   // 载重上限
    maxSpeed: number;      // 最大速度
    acceleration: number;  // 加速度
}

// 底盘接口
export interface Chassis extends TankPart {
    tankPartType: TankPartTypeEnum.Chassis;
    chassisType: ChassisTypeEnum;
    slotCount: number;     // 部件槽位数量
    /** 底盘icon */
    chassisIcon: string;
}

// 战车护盾接口
export interface TankShield extends TankPart {
    tankPartType: TankPartTypeEnum.Shield;
    shieldValue: number;   // 护盾值
    shieldRechargeRate: number; // 护盾充能速度
    cooldown: number;      // 冷却时间
}

// 特殊部件接口
export interface SpecialTankPart extends TankPart {
    tankPartType: TankPartTypeEnum.Special;
    specialAbility: string; // 特殊能力
    abilityValue: number;  // 能力数值
}

// 消耗品接口
export interface Consumable extends BagItem {
    itemType: ItemTypeEnum.Consumable;
    consumableType: ConsumableTypeEnum;
    effectValue: number;   // 效果数值
    targetType: string;    // 目标类型
    cooldown?: number;     // 冷却时间
    stackSize: number;     // 当前堆叠数量
    maxStackSize: number;  // 最大堆叠数量
}

// 任务物品接口
export interface TaskItem extends BagItem {
    itemType: ItemTypeEnum.TaskItem;
    taskType: string;     // 任务类型
    taskTarget: string;   // 任务目标
    taskReward: string;   // 任务奖励
}

// 定义类型守卫

export function isTankPart(item: BagItem): item is TankPart {
    return item.itemType === ItemTypeEnum.TankPart;
}

export function isTankWeapon(item: BagItem): item is TankWeapon {
    return isTankPart(item) && item.tankPartType === TankPartTypeEnum.Weapon;
}

export function isEngine(item: BagItem): item is Engine {
    return isTankPart(item) && item.tankPartType === TankPartTypeEnum.Engine;
}

export function isChassis(item: BagItem): item is Chassis {
    return isTankPart(item) && item.tankPartType === TankPartTypeEnum.Chassis;
}

export function isTankShield(item: BagItem): item is TankShield {
    return isTankPart(item) && item.tankPartType === TankPartTypeEnum.Shield;
}

export function isSpecialTankPart(item: BagItem): item is SpecialTankPart {
    return isTankPart(item) && item.tankPartType === TankPartTypeEnum.Special;
}

export function isConsumable(item: BagItem): item is Consumable {
    return item.itemType === ItemTypeEnum.Consumable;
}
